package com.zjcloud.jwgl.service;

import java.util.List;
import com.zjcloud.jwgl.domain.AcScheduleAlgorithmConfig;

/**
 * 排课算法配置Service接口
 * 
 * @author zjcloud
 * @date 2024-12-19
 */
public interface IAcScheduleAlgorithmConfigService 
{
    /**
     * 查询排课算法配置
     * 
     * @param id 排课算法配置主键
     * @return 排课算法配置
     */
    public AcScheduleAlgorithmConfig selectAcScheduleAlgorithmConfigById(Long id);

    /**
     * 查询排课算法配置列表
     * 
     * @param acScheduleAlgorithmConfig 排课算法配置
     * @return 排课算法配置集合
     */
    public List<AcScheduleAlgorithmConfig> selectAcScheduleAlgorithmConfigList(AcScheduleAlgorithmConfig acScheduleAlgorithmConfig);

    /**
     * 新增排课算法配置
     * 
     * @param acScheduleAlgorithmConfig 排课算法配置
     * @return 结果
     */
    public int insertAcScheduleAlgorithmConfig(AcScheduleAlgorithmConfig acScheduleAlgorithmConfig);

    /**
     * 修改排课算法配置
     * 
     * @param acScheduleAlgorithmConfig 排课算法配置
     * @return 结果
     */
    public int updateAcScheduleAlgorithmConfig(AcScheduleAlgorithmConfig acScheduleAlgorithmConfig);

    /**
     * 批量删除排课算法配置
     * 
     * @param ids 需要删除的排课算法配置主键集合
     * @return 结果
     */
    public int deleteAcScheduleAlgorithmConfigByIds(Long[] ids);

    /**
     * 删除排课算法配置信息
     * 
     * @param id 排课算法配置主键
     * @return 结果
     */
    public int deleteAcScheduleAlgorithmConfigById(Long id);

    /**
     * 查询默认算法配置
     * 
     * @return 默认配置
     */
    public AcScheduleAlgorithmConfig selectDefaultConfig();

    /**
     * 根据算法类型查询配置列表
     * 
     * @param algorithmType 算法类型
     * @return 配置列表
     */
    public List<AcScheduleAlgorithmConfig> selectConfigsByAlgorithmType(String algorithmType);

    /**
     * 根据配置名称查询配置
     * 
     * @param configName 配置名称
     * @return 配置信息
     */
    public AcScheduleAlgorithmConfig selectConfigByName(String configName);

    /**
     * 设置默认配置
     * 
     * @param id 配置ID
     * @param isDefault 是否设为默认
     * @return 结果
     */
    public boolean setDefaultConfig(Long id, Boolean isDefault);
    
    /**
     * 设置默认配置（兼容性方法）
     * 
     * @param id 配置ID
     * @return 结果
     */
    public boolean setDefaultConfig(Long id);

    /**
     * 查询启用的配置列表
     * 
     * @return 配置列表
     */
    public List<AcScheduleAlgorithmConfig> selectEnabledConfigs();

    /**
     * 复制配置
     * 
     * @param id 源配置ID
     * @param newConfigName 新配置名称
     * @return 新配置ID
     */
    public Long copyConfig(Long id, String newConfigName);

    /**
     * 验证配置参数
     * 
     * @param config 配置信息
     * @return 验证结果
     */
    public java.util.Map<String, Object> validateConfig(AcScheduleAlgorithmConfig config);

    /**
     * 获取推荐配置
     * 
     * @param algorithmType 算法类型
     * @param courseCount 课程数量
     * @param classroomCount 教室数量
     * @return 推荐配置
     */
    public AcScheduleAlgorithmConfig getRecommendedConfig(String algorithmType, Integer courseCount, Integer classroomCount);
}